package etc;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;

import modelo.bean.Professor;
import modelo.bean.Usuario;

import util.FabricaConexao;


@SuppressWarnings("deprecation")
public class ProfessorDAOImpl2 implements ProfessorDAO {
	private EntityManager em;

	public ProfessorDAOImpl2() {
		em = FabricaConexao.getEntityManager();
	}

	@Override
	public Professor recuperar(Long id) {
		try {
			abreTx();
			System.out.println("entrou recuperar");
			Usuario u = em.find(Usuario.class, id);
			Professor professor = (Professor) u;
			System.out.println("Usuario " + u.getMatricula());
			System.out.println("Professor " + professor.getCargaHoraria());

			return professor;
		} catch (Exception e) {
			e.getMessage();
			return null;
		} finally {
			// fechaConexao();
		}

	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Professor> listarTodos() {
		try {
			abreTx();
			Query query = em.createQuery("select p from Professor p");
			return query.getResultList();
		} catch (Exception e) {
			e.getMessage();
			return null;
		} finally {
			// fechaConexao();
		}

	}

	@Override
	public boolean criar(Professor professor) {
		try {
			abreTx();
			em.persist(professor);
			commitar();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			// fechaConexao();
		}

	}

	@Override
	public boolean deletar(Long id) {
		try {
			abreTx();
			Professor professor = em.find(Professor.class, id);
			em.remove(professor);
			commitar();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			// fechaConexao();
		}
	}

	@Override
	public boolean editar(Professor professor) {
		try {
			abreTx();
			em.merge(professor);
			commitar();

			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		} finally {
			// fechaConexao();
		}
	}

	private void abreTx() {
//		if (em == null) {
//			em = FabricaConexao.getEntityManager();
//		}
		em.getTransaction().begin();
	}

//	private void fechaConexao() {
//		if (em.isOpen()) {
//			em.close();
//		}
//	}

	private void commitar() {
		em.getTransaction().commit();
	}
}
